package com.itheima.health.dao;

import com.github.pagehelper.Page;
import com.itheima.health.pojo.Menu;
import com.itheima.health.pojo.Role;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @author : ZhangHao
 * @version :1.0
 * @date :Created in 2020/1/2
 * @description : 菜单数据层 接口
 */
public interface MenuDao {
    /**
     * 通过用户名展现当前父菜单
     *
     * @return
     */
    List<Menu> showMenuByUserName(@Param("username") String username);

    /**
     * 通过父Id和username查询子菜单信息
     *
     * @param username,parentMenuId
     * @return
     */
    List<Menu> selectChildren(@Param("username") String username,@Param("parentMenuId") Integer parentMenuId);

    /**
     * 带条件分页查询数据库
     *
     * @param queryString
     * @return
     */
    Page<Menu> selectPageByCondition(@Param("queryString") String queryString);

    void insert(Menu menu);

    Menu selectById(@Param("id") Integer id);

    void update(Menu menu);

    /**
     * 关联菜单和对应的可访问角色
     *
     * @param menuId
     * @param roleId
     */
    void insertMenuAndRole(@Param("menuId") Integer menuId, @Param("roleId") Integer roleId);

    List<Role> selectAllRole();

    /**
     * 查找和菜单关联的role的id集合
     * @param menuId
     * @return
     */
    List<Integer> findRoleIdsByMenuId(@Param("menuId") Integer menuId);

    /**
     * 查询父菜单信息
     * @return
     */
    List<Menu> selectFu();

    /**
     * 根据菜单id删除菜单
     * @param menuId
     */
    void deleteById(@Param("menuId") Integer menuId);

    /**
     * 先删菜单的关联项
     * @param menuId
     */
    void deleteRoleAndMenuByMenuId(@Param("menuId") Integer menuId);

    /**
     * 根据菜单ID查找角色
     * @param id
     * @return
     */
    Set<Role> selectRoleByMenuId(@Param("id") Integer id);
}
